
#pragma once

#import "ckr_spec_cpp.h"
#include <sstream>

void run_equality_comparison_specs();
void run_not_equal_comparison_specs();
void run_less_than_comparison_specs();
void run_less_than_or_equal_comparison_specs();
void run_greater_than_comparison_specs();
void run_greater_than_or_equal_comparison_specs();
void run_container_specs();
void run_between_comparison_specs();
void run_close_to_comparison_specs();
void run_within_comparison_specs();
void run_nullpointer_comparisons_specs();
void run_spec_runner_specs();
void run_context_pass_fail_time_specs();
void run_spec_listener_specs();
void run_consoleSpecRunner_specs();
void run_stringUtil_specs();

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

namespace  ckr
{

class RecordingStartEndSpecListener : public SpecListener
{
public:
	std::stringstream log;

	RecordingStartEndSpecListener()
	{
	};

	virtual ~RecordingStartEndSpecListener()
	{
	};

	virtual void specStarted( const std::string& specName )
	{
		log << "specStarted(" << specName << "); ";
	};

	virtual void specEnded( const std::string& specName, bool passed )
	{
		log << "specEnded(" << specName 
			<< "," << passed << "); ";
	};
};


class PassingSpec : public ckr::Context
{
public:

	PassingSpec() 
		: ckr::Context("PassingSpec",__LINE__, __FILE__)
	{ };

	virtual void spec()
	{
	}
};

class FailingSpec : public ckr::Context
{
public:

	FailingSpec() 
		: ckr::Context("FailingSpec",__LINE__, __FILE__)
	{ };

	virtual void spec()
	{
		FAIL("intentional failure");
	}
};


};// end namespace

